package br.com.jmed.service;

import java.util.List;

import javax.ejb.Stateless;
import javax.inject.Inject;

import br.com.jmed.dao.ConvenioDao;
import br.com.jmed.dao.HospitalDao;
import br.com.jmed.dao.MateriaisDao;
import br.com.jmed.dao.MedicamentoDao;
import br.com.jmed.dao.MedicoDao;
import br.com.jmed.dao.OutrosProfissionaisDao;
import br.com.jmed.dao.PacienteConvenioDao;
import br.com.jmed.dao.PacienteDao;
import br.com.jmed.dao.Parametros;
import br.com.jmed.dao.ProcedimentoDao;
import br.com.jmed.dao.TipoAcomodacaoDao;
import br.com.jmed.dao.TipoAtendimentoDao;
import br.com.jmed.dao.TipoDao;
import br.com.jmed.dao.TipoProcedimentoDao;
import br.com.jmed.model.Convenio;
import br.com.jmed.model.Hospital;
import br.com.jmed.model.Materiai;
import br.com.jmed.model.Medicamento;
import br.com.jmed.model.Medico;
import br.com.jmed.model.OutrosProfissionai;
import br.com.jmed.model.Paciente;
import br.com.jmed.model.PacienteConvenio;
import br.com.jmed.model.Procedimento;
import br.com.jmed.model.Tipo;
import br.com.jmed.model.TipoAcomodacao;
import br.com.jmed.model.TipoAtendimento;
import br.com.jmed.model.TipoProcedimento;

@Stateless
public class CadastrosService {

	@Inject
	private HospitalDao hospitalDao;

	@Inject
	private PacienteDao pacienteDao;

	@Inject
	private PacienteConvenioDao pacienteConvenioDao;

	@Inject
	private MedicoDao medicoDao;

	@Inject
	private TipoAtendimentoDao tipoAtendimentoDao;

	@Inject
	private TipoProcedimentoDao tipoProcedimentoDao;

	@Inject
	private TipoAcomodacaoDao tipoAcomodacaoDao;

	@Inject
	private ProcedimentoDao procedimentoDao;

	@Inject
	private OutrosProfissionaisDao outrosProfissionaisDao;

	@Inject
	private MedicamentoDao medicamentoDao;

	@Inject
	private MateriaisDao materiaisDao;

	@Inject
	private ConvenioDao convenioDao;
	
	@Inject
	private TipoDao tipoDao;

	public List<Hospital> findHospitalByName(String argumento) {
		Parametros<String> nome = new Parametros<String>();
		nome.setNome("nomeFantasia");
		nome.setValor(argumento + "%");
		return hospitalDao.findToList("Hospital.findByName", nome);
	}
	
	public List<Hospital> findHospitalByCodeOrName(Integer codigo, String nome) {
		Parametros<String> nomeParametro = new Parametros<String>();
		Parametros<Integer> codigoParametro = new Parametros<Integer>();
		codigoParametro.setNome("codigo");
		nomeParametro.setNome("nomeFantasia");
		nomeParametro.setValor(nome + "%");
		codigoParametro.setValor(codigo);
		return hospitalDao.findToList("Hospital.findByCodeOrName", nomeParametro,codigoParametro);
	}
	
	public void atualizarConvenio(Convenio convenio){
		convenioDao.merge(convenio);
	}
	
	public List<Convenio> findConvenioByCodeOrName(Integer codigo, String nome) {
		Parametros<String> nomeParametro = new Parametros<String>();
		Parametros<Integer> codigoParametro = new Parametros<Integer>();
		codigoParametro.setNome("codigo");
		nomeParametro.setNome("nomeFantasia");
		nomeParametro.setValor(nome + "%");
		codigoParametro.setValor(codigo);
		return convenioDao.findToList("Convenio.findByCodeOrName", nomeParametro,codigoParametro);
	}
	
	public void atualizarHospital(Hospital hospital){
		hospitalDao.merge(hospital);
	}
	
	public List<Paciente> findPacienteByName(String argumento) {
		Parametros<String> nome = new Parametros<String>();
		nome.setNome("nome");
		nome.setValor(argumento + "%");
		return pacienteDao.findToList("Paciente.findByName", nome);
	}

	public List<PacienteConvenio> findPacienteConvenioByPaciente(
			Integer paciente) {
		Parametros<Integer> codigoPaciente = new Parametros<Integer>();
		codigoPaciente.setNome("paciente");
		codigoPaciente.setValor(paciente);
		return pacienteConvenioDao.findToList(
				"PacienteConvenio.findByPaciente", codigoPaciente);
	}

	public List<Medico> findMedicoByNome(String nome) {
		Parametros<String> parametro = new Parametros<String>();
		parametro.setNome("nome");
		parametro.setValor(nome + "%");
		return medicoDao.findToList("Medico.findByNome", parametro);
	}

	public List<OutrosProfissionai> findOutrosProfissionaisByNome(String nome) {
		Parametros<String> parametro = new Parametros<String>();
		parametro.setNome("nome");
		parametro.setValor(nome + "%");
		return outrosProfissionaisDao.findToList(
				"OutrosProfissionais.findByNome", parametro);
	}

	public List<Medicamento> findMedicamentosByNome(String nome) {
		Parametros<String> parametro = new Parametros<String>();
		parametro.setNome("nome");
		parametro.setValor(nome + "%");
		return medicamentoDao.findToList("Medicamento.findByName", parametro);
	}

	public List<Materiai> findMateriaisByNome(String nome) {
		Parametros<String> parametro = new Parametros<String>();
		parametro.setNome("nome");
		parametro.setValor(nome + "%");
		return materiaisDao.findToList("Materiais.findByName", parametro);
	}

	public List<Procedimento> findProcedimentoByName(String nome) {
		Parametros<String> parametro = new Parametros<String>();
		parametro.setNome("descricao");
		parametro.setValor(nome + "%");
		return procedimentoDao.findToList("Procedimento.findByDescricao", parametro);
	}
	
	public List<Tipo> findTipoByModelo(String modelo){
		Parametros<String> parametro = new Parametros<String>();
		parametro.setNome("modelo");
		parametro.setValor(modelo);
		return tipoDao.findToList("Tipo.findByModelo", parametro);
	}

	public List<Convenio> findAllConvenios() {
		return convenioDao.findToList("Convenio.findAll", new Parametros[0]);
	}

	public List<TipoAtendimento> findTipoAtendimentoAll() {
		return tipoAtendimentoDao.findToList("TipoAtendimento.findAll",
				new Parametros[0]);
	}

	public List<TipoProcedimento> findTipoProcedimentoAll() {
		return tipoProcedimentoDao.findToList("TipoProcedimento.findAll",
				new Parametros[0]);
	}

	public List<TipoAcomodacao> findTipoAcomodacaoAll() {
		return tipoAcomodacaoDao.findToList("TipoAcomodacao.findAll",
				new Parametros[0]);
	}

	public Convenio findConvenioByCode(Integer codigo) {
		return convenioDao.find(Convenio.class, codigo);
	}

	public Paciente findPacienteByCode(Integer codigo) {
		return pacienteDao.find(Paciente.class, codigo);
	}

	public TipoAcomodacao findTipoAcomodacaoByCode(Integer codigo) {
		return tipoAcomodacaoDao.find(TipoAcomodacao.class, codigo);
	}

	public TipoAtendimento findTipoAtendimentoByCode(Integer codigo) {
		return tipoAtendimentoDao.find(TipoAtendimento.class, codigo);
	}

	public Medico findMedicoByCode(Integer codigo) {
		return medicoDao.find(Medico.class, codigo);
	}

	public OutrosProfissionai findOutrosProfissionaisByCode(Integer codigo) {
		return outrosProfissionaisDao.find(OutrosProfissionai.class, codigo);
	}

	public void salvarMedico(Medico medico) {
		medicoDao.save(medico);
	}

	public Materiai findMateriaisByCode(Integer codigo) {
		return materiaisDao.find(Materiai.class, codigo);
	}

	public Procedimento findProcedimentoByCode(Integer codigo) {
		return procedimentoDao.find(Procedimento.class, codigo);
	}

	public Medicamento findMedicamentoByCode(Integer codigo) {
		return medicamentoDao.find(Medicamento.class, codigo);
	}

	public TipoProcedimento findTipoProcedimentoByCode(Integer codigo) {
		return tipoProcedimentoDao.find(TipoProcedimento.class, codigo);
	}

	public Hospital findHospitalByCode(Integer codigo) {
		return hospitalDao.find(Hospital.class, codigo);
	}

	public void setHospitalDao(HospitalDao hospitalDao) {
		this.hospitalDao = hospitalDao;
	}

	public void setPacienteDao(PacienteDao pacienteDao) {
		this.pacienteDao = pacienteDao;
	}

	public void setPacienteConvenioDao(PacienteConvenioDao pacienteConvenioDao) {
		this.pacienteConvenioDao = pacienteConvenioDao;
	}

	public void setTipoAtendimentoDao(TipoAtendimentoDao tipoAtendimentoDao) {
		this.tipoAtendimentoDao = tipoAtendimentoDao;
	}

	public void setTipoProcedimentoDao(TipoProcedimentoDao tipoProcedimentoDao) {
		this.tipoProcedimentoDao = tipoProcedimentoDao;
	}

	public void setTipoAcomodacaoDao(TipoAcomodacaoDao tipoAcomodacaoDao) {
		this.tipoAcomodacaoDao = tipoAcomodacaoDao;
	}

	public void setProcedimentoDao(ProcedimentoDao procedimentoDao) {
		this.procedimentoDao = procedimentoDao;
	}

	public void setOutrosProfissionaisDao(
			OutrosProfissionaisDao outrosProfissionaisDao) {
		this.outrosProfissionaisDao = outrosProfissionaisDao;
	}

	public void setMedicamentoDao(MedicamentoDao medicamentoDao) {
		this.medicamentoDao = medicamentoDao;
	}

	public void setMateriaisDao(MateriaisDao materiaisDao) {
		this.materiaisDao = materiaisDao;
	}

	public void setConvenioDao(ConvenioDao convenioDao) {
		this.convenioDao = convenioDao;
	}

	public void setTipoDao(TipoDao tipoDao) {
		this.tipoDao = tipoDao;
	}
	
	
}
